/***************************************************
 @Name :        小铭同学
 @Time :        2022-10-30
 @Email :       LiaoMingWJ233@163.com
 @Comment :     主循环，底盘控制逻辑
 @FileName :    main.c
 @Version :     1.0
****************************************************/


#include "main.h"

#include "status.h"
#include "automatic.h"
#include "controlled.h"

#include "device.h"
#include "peripheral.h"

#include "track.h"



int main(void)
{
  HAL_Init();                     /* HAL相关功能初始化 */
  system_clock_init();            /* 系统时钟设置与延时功能设置 */

  peripheral_init();              /* MCU外设初始化 */
    
    
    /* 测试循迹用 */
//    delay_ms(300);
//    track_drive_test();
    /* 测试循迹用 */
/*
  while(1)
	{
		timer_servo1_pwm_set(2800);//右正
		timer_servo2_pwm_set(4600);//左正
		
		delay_ms(3000);
		timer_servo1_pwm_set(4700);//右
		timer_servo2_pwm_set(2500);//左
		delay_ms(3000);
	}*/ 
	  
  while (1)
  {
    /* 控制指令处理 */
    if (status.new_msg > 0)       /* 未处理的新消息数>1 */
    {
      hostpc_cmd_refresh();       /* 根据指令更新status结构体 */

      if (status.control_mode == automatic)
      {
        auto_run(status.location, status.destination);    /* 从当前位置运行到目标位置 */
      }

      else /* status.control_mode == controlled */
      {
        ctrl_run(status.ctrl_cmd);                        /* 根据hostpc指令运行 */
      }

      hostpc_send(0x01);          /* 通知上位机执行完毕 */
      status.new_msg = 0;         /* 处理完所有消息了 */
    }    
  }
}



/*
  track_drive_test();     //前进循迹测试，十字路口停车
  track_reverse_test();   //倒车循迹测试，十字路口停车
  track_turn_test();      //转弯测试，十字路口停车，然后左转
  auto_ctrl_test();
  ultrasonic_test();
*/

/*
  timer_rgb_led_init();
  
  while(1)
  {
    if (ultrasonic_distance()<100)
    {
      rgb_led(1);
    }
    else
    {
      rgb_led(0);
    }
    delay_ms(500);  
  }

*/
